package com.hejing.project02_拼电商客户管理系统;

/**
 * ClassName: CustomerList
 * Package: com.hejing.project02_拼电商客户管理系统
 * Description:
 *      为Customer对象的管理模块，内部使用数组管理一组Customer对象，并提供相应的添加、修改、删除和遍历方法，
 *      供CustomerView调用
 * @Author: HeJing
 * @Create: 2023-03-25 14:13
 * @Version: 1.0
 */
public class CustomerList {
    private Customer[] customers;  // 用来保存客户对象的数组
    private int total;  // 记录已保存客户对象的数量

    /**
     * 用途: 构造器，用来初始化customers数组
     * @param totalCustomer
     */
    public CustomerList(int totalCustomer) {
        customers = new Customer[totalCustomer];
    }

    /**
     * 用途: 将参数customer添加到customer数组中(尾加)
     * @param customer customer指定要添加的客户对象
     * @return 添加成功返回true, false则表示数组已满，无法添加。
     */
    public boolean addCustomer(Customer customer){
        if(total < customers.length) {
            customers[total] = customer;
            total += 1;
            return true;
        }else {
            return false;
        }
    }

    /**
     * 用途: 使用参数cust替换数组中由index索引指定的对象。
     * @param index customer指定被替换的对象的索引
     * @param cust customer指定替换的对象。
     * @return  替换成功返回true, flase表示索引无效，无法替换。
     */
    public boolean replaceCustomer(int index, Customer cust) {
        if(index >= 0 && index < total) {
            customers[index] = cust;
            return true;
        }
        return false;
    }

    /**
     * 用途: 删除指定索引位置的customer对象。
     * @param index 指定删除的customer对象所在的索引。
     * @return 删除成功则返回true, false表示删除失败。
     */
    public boolean deleteCustomer(int index) {
        if(index < 0 || index >= total) {
            return false;
        }
        // index 符合规范，进行删除操作
        for(int i = index; i < total - 1; i++) {
            customers[i] = customers[i + 1];
        }

        // 将有效数据的最后一个位置 置空
        customers[--total] = null;
        return true;
    }

    /**
     * 用途: 返回数组中记录的所有客户对象。
     * @return Customer[], 数组中包含了当前的所有客户对象，该数组长度与对象个数相同。
     */
    public Customer[] getAllCustomers() {
        Customer[] ret_customers = new Customer[total];
        for(int i = 0; i < total; i++) {
            ret_customers[i] = customers[i];
        }
        return ret_customers;
    }

    /**
     * 用途: 返回参数index指定索引位置的Customer对象记录
     * @param index 指定所要获取的客户在数组中的索引位置，从0开始。
     * @return 封装了客户信息的Customer对象。
     */
    public Customer getCustomer(int index) {
        if(index < 0 || index >= total) {
            return null;
        } else {
            return customers[index];
        }
    }

    /**
     * 用途: 获取客户列表中客户的数量。
     * @return total
     */
    public int getTotal(){
        return total;
    }

}






























